package org.apache.commons.pool2;

/**
 * 类的描述
 *
 * @author ztkool
 * @version v
 */
public interface PooledObjectFactory<T> {

    /**
     * 创建可由池提供服务的实例，并将其包装到池管理的PooledObject中。
     *
     * @return
     * @throws Exception
     */
    PooledObject<T> makeObject() throws Exception;

    /**
     * 销毁池不再需要的实例。
     *
     * @param pooledObject
     * @throws Exception
     */
    void destroyObject(PooledObject<T> pooledObject) throws Exception;

    /**
     * 确保实例安全地由池返回。
     *
     * @param pooledObject
     * @return
     */
    boolean validateObject(PooledObject<T> pooledObject);

    /**
     * 重新初始化池返回的实例。
     *
     * @param pooledObject
     * @throws Exception
     */
    void activateObject(PooledObject<T> pooledObject) throws Exception;

    /**
     * 取消初始化要返回到空闲对象池的实例。
     *
     * @param pooledObject
     * @throws Exception
     */
    void passivateObject(PooledObject<T> pooledObject) throws Exception;
}
